﻿#pragma once
#include <vector>
#include "MetricesData.h"
typedef const std::vector<float> & ConstFVecPtr;
typedef std::vector<float> & FVecPtr;
// 指标计算
class MetricsCompute
{
public:
	MetricsCompute();
	~MetricsCompute();
	// 均线计算
	void MA(ConstFVecPtr pCloseValues, int inTimePeriod, MetData::MAMetrice &outMa);
	//************************************
	// Method:    移动平滑异同平均线
	// Parameter: const std::vector<float> & pCloseValues 收盘值
	// Parameter: int optInFastPeriod 快线周期 12
	// Parameter: int optInSlowPeriod 慢线周期 26
	// Parameter: int optInSignalPeriod  9

	//************************************
	void MACD(ConstFVecPtr pCloseValues, int optInFastPeriod, int optInSlowPeriod, int optInSignalPeriod, MetData::MACDMeterice &outVal);

	//************************************
	// Method:    真实波幅（ATR average true range）
	// Parameter: ConstFVecPtr pHighValues K线高价数组
	// Parameter: ConstFVecPtr pLowValues K线低价数组
	// Parameter: ConstFVecPtr pCloseValues 收盘数组
	// Parameter: int optInTimePeriod 周期
	// Parameter: FVecPtr outAtr 返回数组
	//************************************
	void ATR(ConstFVecPtr pHighValues, ConstFVecPtr pLowValues, ConstFVecPtr pCloseValues, int optInTimePeriod, MetData::ATRMetrice & outVal);

	//************************************
	// Method:    布林带计算
	// Parameter: ConstFVecPtr pCloseValues 收盘数组
	// Parameter: int optInTimePeriod MA周期
	// Parameter: FVecPtr outRealUpperBand 上轨数据
	// Parameter: FVecPtr outRealMiddleBand 中轨数据
	// Parameter: FVecPtr outRealLowerBand 下轨数据
	//************************************
	void Boll(ConstFVecPtr pCloseValues, int optInTimePeriod, MetData::BollMetrice &outVal);

	//************************************
	// Method:    量价指标: OBV (On-Balance Volume，净额成交量或叫能量潮指标）
	// Parameter: ConstFVecPtr pCloseValues 收盘值 
	// Parameter: ConstFVecPtr pVolumeValues 成交量值
	// Parameter: FVecPtr outValues 返回值
	//************************************
	void OVB(ConstFVecPtr pCloseValues, ConstFVecPtr pVolumeValues, MetData::OVBMetrice &outVal);
};

